<?php
namespace Home\Controller;
use Home\Controller\BaseController;
class PayController extends BaseController {
	public function _initialize(){
		  if(!session('?user')){
				 echo "<script>alert('请先登录或者注册！');window.location.href=document.referrer;</script>";//返回并刷新
				  exit;
			  }
	}
    public function index(){
	$msg=I('post.');
	$len=count($msg['num']);
	//var_dump($len);
	
	$allnum=0;
	$alltotal=0.0;
	for($i=0;$i<$len;$i++){//重新分配数据格式
		$nmsg[$i]['pic']=$msg['path'][$i];
		$nmsg[$i]['gid']=$msg['gid'][$i];
		$nmsg[$i]['gname']=$msg['gname'][$i];
		$nmsg[$i]['price']=$msg['price'][$i];
		$nmsg[$i]['danwei']=$msg['danwei'][$i];
		$nmsg[$i]['num']=$msg['num'][$i];
		$total=floatval($msg['price'][$i])*intval($msg['num'][$i]);
		if($total!=$msg['total'][$i])
			echo "<script>alert('别给爷改数据，你还嫩点！');window.location.href=document.referrer;</script>";//返回并刷新
		$nmsg[$i]['total']=$total;
		
		$allnum+=intval($nmsg[$i]['num']);
		$alltotal+=floatval($nmsg[$i]['total']);
	}
	$this->assign("list",$nmsg);
	$this->assign("allnum",$allnum);
	$this->assign("alltotal",$alltotal);
	$this->display();
    }
	public function shdz(){//确认收货地址
		if(isset($_SESSION['user']['addmsg']) && $_SESSION['user']['addmsg']!=null){
			$msg=$_SESSION['user']['addmsg'];
		}else  $msg=I('post.');
		
		$_SESSION['user']['addmsg']=$msg;
		$len=count($msg['goodnum']);
		for($i=0;$i<$len;$i++){//重新分配数据格式
			$dingdan[$i]['gid']=$msg['gid'][$i];
			$dingdan[$i]['num']=$msg['goodnum'][$i];
		}
		$_SESSION['user']['dingdan']=$dingdan;//将订单信息存储到session中
		
		$uid=$_SESSION['user']['id'];
		$sql="select * from uadress where uid='".$uid."'";
		//echo $_SESSION['user']['name'];
		$res=M()->query($sql);
		$this->assign("list",$res);
		$this->display();
	}
	public function add(){		
		$msg=I('post.');
		$msg['uid']=$_SESSION['user']['id'];
		$model=D('uadress');
		if($model->create($msg)){
			$model->add();
		}else{
			$this->error($model->getError());
			echo "<script>alert('添加失败！');window.location.href=document.referrer;</script>";//返回并刷新
		}
		
		$sql="select * from uadress where uid='{$msg['uid']}' and name='{$msg['name']}' and phone='{$msg['phone']}' and location='{$msg['location']}'";
		//echo $sql;
		$res=M()->query($sql);
		//var_dump($_SESSION['user']); exit;
		echo "<script>alert('添加成功！');window.location.href=document.referrer;</script>";//返回上一页面
	}
	public function seeandpay(){
		$_SESSION['user']['addmsg']=null;
		$msg=I('post.');
		
		//产生订单号--时间月份日期---秒，6位随机数
		$t=time();
		$dnum=date("YmdHis",$t);
		$rand=sprintf("%06d", rand(0,100000));
		$dnum.=$rand;
		
		//var_dump($msg['aid']);
		
		if(intval($msg['aid'])==-1){
			//echo "111";
			$receiver['location']=$_SESSION['user']['location'];
			$receiver['name']=$_SESSION['user']['name'];
			$receiver['phone']=$_SESSION['user']['phone'];
			//var_dump($receiver);
			
		}else{
			//echo "222";
			//查找收货人相关信息
			$sql="select * from uadress where id='{$msg['aid']}'";
			$receiver=M()->query($sql);
			//var_dump($receiver);exit;
			$receiver=$receiver[0];
		}
		//var_dump($receiver);
		//查找商品的相关信息并插入详细表
		$len=count($_SESSION['user']['dingdan']);
		if(isset($_SESSION['user']['dingdan']['total'])) $len-=2;//确定订单数量
		$dingdan=$_SESSION['user']['dingdan'];
		$total=0;
		
		
		//var_dump($len);
		$sql="insert into dingdandet values";
		for($i=0;$i<$len;$i++){
			//查询商品信息
			$sql1="select * from goods where id='{$dingdan[$i]['gid']}'";
			$res=M()->query($sql1);
			
			//插入详细表
			$num=$dingdan[$i]['num'];
			$dtotal=intval($num)*floatval($res[0]['price']);
			//var_dump($res);
			if($i) $sql.=",";
			$sql.="(null,'{$dnum}','{$_SESSION['user']['id']}','{$res[0]['id']}','{$res[0]['name']}','{$res[0]['price']}','{$res[0]['danwei']}','{$res[0]['pic']}','{$num}','{$dtotal}','0')";
			
			//总价
			$total+=floatval($dtotal);
		}
		//var_dump($receiver);echo "123";
		M()->execute($sql);
		//echo $sql."<br>";
		
		//var_dump($receiver);exit;
		//插入订单表
		$now=date('Y-m-d H-i-s',time());
		$sql="insert into dingdan values(null,'{$dnum}','{$_SESSION['user']['id']}','{$_SESSION['user']['name']}','{$total}','{$receiver['name']}','{$receiver['location']}','{$receiver['phone']}',0,'{$now}')";
		//echo $sql;exit;
		M()->execute($sql);
		
		$_SESSION['user']['dingdan']['total']=$total;//将总金额存起来
		$_SESSION['user']['dingdan']['dnum']=$dnum;//将订单号存起来
		
		//查询所有页面需要显示的1 订单详情 2 总价以及收货信息
		
		$sql="select * from dingdandet where dnum='{$dnum}'";
		$res=M()->query($sql);
		$this->assign("list",$res);
		
		$sql="select * from dingdan where dnum='{$dnum}'";
		$res=M()->query($sql);
		$this->assign("dingdan",$res);
		
		$this->display();
	}
	
	public function finish(){
		$dnum=$_SESSION['user']['dingdan']['dnum'];
		if($dnum==null) $dnum=I('get.dnum');
		$sql="update dingdan set flag=1 where dnum='{$dnum}'";
		if(M()->execute($sql)>=0){//更改成功
			//查询所有页面需要显示的1 订单详情 2 总价以及收货信息
			$sql="select * from dingdandet where dnum='{$dnum}'";
			$res=M()->query($sql);
			$this->assign("list",$res);
			
			//销售数量增加
			for($i=0;$i<count($res);$i++){
				$sql1="update goods set sum=sum+{$res[$i]['num']} where id='{$res[$i]['gid']}'";
				//echo $sql1;exit;
				M()->execute($sql1);
			}
			
			$sql="select * from dingdan where dnum='{$dnum}'";
			$res=M()->query($sql);
			$this->assign("dingdan",$res);
			
			$this->assign("allprice",$_SESSION['user']['dingdan']['total']);
			
			
			//清空购物车的session
			$_SESSION['user']['dingdan']=null;
						
			$this->display();
		}else{
			echo "<script>alert('支付失败！');history.go(-1);</script>";
		}
		
		
	}
	public function  alipayapi(){//确认界面
				/* *
		 * 功能：即时到账交易接口接入页
		 * 版本：3.4
		 * 修改日期：2016-03*08
		 * 说明：
		 * 以下代码只是为了方便商户测试而提供的样例代码，商户可以根据自己网站的需要，按照技术文档编写,并非一定要使用该代码。
		 * 该代码仅供学习和研究支付宝接口使用，只是提供一个参考。

		 *************************注意*****************
		 
		 *如果您在接口集成过程中遇到问题，可以按照下面的途径来解决
		 *1、开发文档中心（https://doc.open.alipay.com/doc2/detail.htm?spm=a219a.7629140.0.0.KvddfJ&treeId=62&articleId=103740&docType=1）
		 *2、商户帮助中心（https://cshall.alipay.com/enterprise/help_detail.htm?help_id=473888）
		 *3、支持中心（https://support.open.alipay.com/alipay/support/index.htm）

		 *如果想使用扩展功能,请按文档要求,自行添加到parameter数组即可。
		 **********************************************
		 */
		require_once("C:\www\htdocs\Green\Public\paytools\alipay.config.php");
		require_once("C:\www\htdocs\Green\Public\paytools\lib\alipay_submit.class.php");

		/**************************请求参数**************************/
				//商户订单号，商户网站订单系统中唯一订单号，必填
				$out_trade_no = $_SESSION['user']['dingdan']['dnum'];

				//订单名称，必填
				$subject = "格林农场订单";

				//付款金额，必填
				$total_fee = $_SESSION['user']['dingdan']['total'];

				//商品描述，可空
				$body = "特色农产品";

		/************************************************************/

		//构造要请求的参数数组，无需改动
		$parameter = array(
				"service"       => $alipay_config['service'],
				"partner"       => $alipay_config['partner'],
				"seller_id"  => $alipay_config['seller_id'],
				"payment_type"	=> $alipay_config['payment_type'],
				"notify_url"	=> $alipay_config['notify_url'],
				"return_url"	=> $alipay_config['return_url'],
				
				"anti_phishing_key"=>$alipay_config['anti_phishing_key'],
				"exter_invoke_ip"=>$alipay_config['exter_invoke_ip'],
				"out_trade_no"	=> $out_trade_no,
				"subject"	=> $subject,
				"total_fee"	=> $total_fee,
				"body"	=> $body,
				"_input_charset"	=> trim(strtolower($alipay_config['input_charset']))
				//其他业务参数根据在线开发文档，添加参数.文档地址:https://doc.open.alipay.com/doc2/detail.htm?spm=a219a.7629140.0.0.kiX33I&treeId=62&articleId=103740&docType=1
				//如"参数名"=>"参数值"
				
		);

		//建立请求
		$alipaySubmit = new \AlipaySubmit($alipay_config);
		$html_text = $alipaySubmit->buildRequestForm($parameter,"get", "确认");
		//echo $html_text;exit;
		$this->assign("text",$html_text);
		$this->display();
	}
	public function delete(){//删除
		parent::delete("uadress","id","pic");
	}
	public function register(){
		parent::add("users","pic");
	}
	 //支付宝相关函数
	 public function notify_url(){
		/* *
		 * 功能：支付宝服务器异步通知页面
		 * 版本：3.3
		 * 日期：2012-07-23
		 * 说明：
		 * 以下代码只是为了方便商户测试而提供的样例代码，商户可以根据自己网站的需要，按照技术文档编写,并非一定要使用该代码。
		 * 该代码仅供学习和研究支付宝接口使用，只是提供一个参考。


		 *************************页面功能说明*************************
		 * 创建该页面文件时，请留心该页面文件中无任何HTML代码及空格。
		 * 该页面不能在本机电脑测试，请到服务器上做测试。请确保外部可以访问该页面。
		 * 该页面调试工具请使用写文本函数logResult，该函数已被默认关闭，见alipay_notify_class.php中的函数verifyNotify
		 * 如果没有收到该页面返回的 success 信息，支付宝会在24小时内按一定的时间策略重发通知
		 */

	require_once("../paytools/alipay.config.php");
	require_once("../paytools/lib/alipay_notify.class.php");

	//计算得出通知验证结果
	$alipayNotify = new AlipayNotify($alipay_config);
	$verify_result = $alipayNotify->verifyNotify();

	if($verify_result) {//验证成功
		/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		//请在这里加上商户的业务逻辑程序代

		
		//——请根据您的业务逻辑来编写程序（以下代码仅作参考）——
		
		//获取支付宝的通知返回参数，可参考技术文档中服务器异步通知参数列表
		
		//商户订单号

		$out_trade_no = $_POST['out_trade_no'];

		//支付宝交易号

		$trade_no = $_POST['trade_no'];

		//交易状态
		$trade_status = $_POST['trade_status'];


		if($_POST['trade_status'] == 'TRADE_FINISHED') {
			//判断该笔订单是否在商户网站中已经做过处理
				//如果没有做过处理，根据订单号（out_trade_no）在商户网站的订单系统中查到该笔订单的详细，并执行商户的业务程序
				//请务必判断请求时的total_fee、seller_id与通知时获取的total_fee、seller_id为一致的
				//如果有做过处理，不执行商户的业务程序
					
			//注意：
			//退款日期超过可退款期限后（如三个月可退款），支付宝系统发送该交易状态通知

			//调试用，写文本函数记录程序运行情况是否正常
			//logResult("这里写入想要调试的代码变量值，或其他运行的结果记录");
		}
		else if ($_POST['trade_status'] == 'TRADE_SUCCESS') {
			//判断该笔订单是否在商户网站中已经做过处理
				//如果没有做过处理，根据订单号（out_trade_no）在商户网站的订单系统中查到该笔订单的详细，并执行商户的业务程序
				//请务必判断请求时的total_fee、seller_id与通知时获取的total_fee、seller_id为一致的
				//如果有做过处理，不执行商户的业务程序
					
			//注意：
			//付款完成后，支付宝系统发送该交易状态通知

			//调试用，写文本函数记录程序运行情况是否正常
			//logResult("这里写入想要调试的代码变量值，或其他运行的结果记录");
		}

		//——请根据您的业务逻辑来编写程序（以上代码仅作参考）——
			
		echo "success";		//请不要修改或删除
		
		/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	}
	else {
		//验证失败
		echo "fail";

		//调试用，写文本函数记录程序运行情况是否正常
		//logResult("这里写入想要调试的代码变量值，或其他运行的结果记录");
	}
     }
	 
	public function return_url(){
		/* * 
		 * 功能：支付宝页面跳转同步通知页面
		 * 版本：3.3
		 * 日期：2012-07-23
		 * 说明：
		 * 以下代码只是为了方便商户测试而提供的样例代码，商户可以根据自己网站的需要，按照技术文档编写,并非一定要使用该代码。
		 * 该代码仅供学习和研究支付宝接口使用，只是提供一个参考。

		 *************************页面功能说明*************************
		 * 该页面可在本机电脑测试
		 * 可放入HTML等美化页面的代码、商户业务逻辑程序代码
		 * 该页面可以使用PHP开发工具调试，也可以使用写文本函数logResult，该函数已被默认关闭，见alipay_notify_class.php中的函数verifyReturn
		 */

		require_once("../paytools/alipay.config.php");
		require_once("../paytools/lib/alipay_notify.class.php");

		//计算得出通知验证结果
		$alipayNotify = new AlipayNotify($alipay_config);
		$verify_result = $alipayNotify->verifyReturn();
		if($verify_result) {//验证成功
			/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
			//请在这里加上商户的业务逻辑程序代码
			
			//——请根据您的业务逻辑来编写程序（以下代码仅作参考）——
			//获取支付宝的通知返回参数，可参考技术文档中页面跳转同步通知参数列表

			//商户订单号

			$out_trade_no = $_GET['out_trade_no'];

			//支付宝交易号

			$trade_no = $_GET['trade_no'];

			//交易状态
			$trade_status = $_GET['trade_status'];


			if($_GET['trade_status'] == 'TRADE_FINISHED' || $_GET['trade_status'] == 'TRADE_SUCCESS') {
				//判断该笔订单是否在商户网站中已经做过处理
					//如果没有做过处理，根据订单号（out_trade_no）在商户网站的订单系统中查到该笔订单的详细，并执行商户的业务程序
					//如果有做过处理，不执行商户的业务程序
			}
			else {
			  echo "trade_status=".$_GET['trade_status'];
			}				
			echo "验证成功<br />";
			//——请根据您的业务逻辑来编写程序（以上代码仅作参考）——
			/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		}
		else {
			//验证失败
			//如要调试，请看alipay_notify.php页面的verifyReturn函数
			echo "验证失败";
		}
	}
}